package com.path.android.jobqueue.test.jobqueue; import com.path.android.jobqueue.BaseJob; import com.path.android.jobqueue.JobQueue; import com.path.android.jobqueue.Params; import com.path.android.jobqueue.persistentQueue.sqlite.SqliteJobQueue; import com.path.android.jobqueue.test.util.JobQueueFactory; import org.hamcrest.CoreMatchers; import org.hamcrest.MatcherAssert; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import java.io.IOException; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @RunWith(RobolectricTestRunner.class) public class SqliteJobQueueTest extends JobQueueTestBase { public SqliteJobQueueTest() { super(new JobQueueFactory() { @Override public JobQueue createNew(long sessionId, String id) { return new SqliteJobQueue(Robolectric.application, sessionId, id, new SqliteJobQueue.JavaSerializer()); } }); } @Test public void testCustomSerializer() throws Exception { final CountDownLatch calledForSerialize = new CountDownLatch(1); final CountDownLatch calledForDeserialize = new CountDownLatch(1); SqliteJobQueue.JobSerializer jobSerializer = new SqliteJobQueue.JavaSerializer() { @Override public byte[] serialize(Object object) throws IOException { calledForSerialize.countDown(); return super.serialize(object); } @Override public <T extends BaseJob> T deserialize(byte[] bytes) throws IOException, ClassNotFoundException { calledForDeserialize.countDown(); return super.deserialize(bytes); } }; SqliteJobQueue jobQueue = new SqliteJobQueue(Robolectric.application, System.nanoTime(), "__" + System.nanoTime(), jobSerializer); jobQueue.insert(createNewJobHolder(new Params(0))); calledForSerialize.await(1, TimeUnit.SECONDS); MatcherAssert.assertThat("custom serializer should be called for serialize", (int) calledForSerialize.getCount(), CoreMatchers.equalTo(0)); MatcherAssert.assertThat("custom serializer should NOT be called for deserialize", (int) calledForDeserialize.getCount(), CoreMatchers.equalTo(1)); jobQueue.nextJobAndIncRunCount(true, null); MatcherAssert.assertThat("custom serializer should be called for deserialize", (int) calledForDeserialize.getCount(), CoreMatchers.equalTo(0)); } }